/*============================================================================*/
/*  ファイル : memlib.c                                                       */
/*  機能概要 : メモリ操作関数ソースファイル                                   */
/*  更新履歴 : 2011/01/20 新規作成                                            */
/*============================================================================*/
/* Include Files */
#include <string.h>
/* Defines */
/* Types */
/* External Functions */
/* External Variables */
/* Global Variables */
/* Local Variables */
/* Local Functions */

/*============================================================================*/
/*  名称     : memswap - a_dataとb_dataの内容をsize分交換する                 */
/*  呼出し   : a_data - データA                                               */
/*             b_data - データB                                               */
/*             size   - 交換サイズ                                            */
/*  戻り値   : none                                                           */
/*============================================================================*/
void memswap( void *a_data, void *b_data, size_t size )
{
	/* Local Variables */
	char *a_pos = (char *)a_data;
	char *b_pos = (char *)b_data;
	char tmpbuf;

	for( ; 0 < size; --size, ++a_pos, ++b_pos )
	{
		tmpbuf = *a_pos;
		*a_pos = *b_pos;
		*b_pos = tmpbuf;
	}

	return;
}

/*============================================================================*/
/*  名称     : memreverse - 配列要素を逆順に並べ替える                        */
/*  呼出し   : array - 配列                                                   */
/*             num   - 要素数                                                 */
/*             size  - 要素のサイズ                                           */
/*  戻り値   : none                                                           */
/*============================================================================*/
void memreverse( void *array, size_t num, size_t size )
{
	/* Local Variables */
	char *l_pos = (char *)array;
	char *r_pos = (char *)array + ((num - 1) * size);

	for( ; l_pos < r_pos; l_pos = l_pos + size, r_pos = r_pos - size)
	{
		memswap( l_pos, r_pos, size);
	}

	return;
}
